﻿/**
	@file		NIDataQueryIF.h
	@brief		NIDataQueryIF
	@details
*/
#ifndef	__NIDATAQUERYIF_H_
#define	__NIDATAQUERYIF_H_

namespace Navinfo {
namespace IMPAuto {
namespace DataQuery {

class IDataQueryManager;
class IMetaData;
class IDataQueryAssist;
class IBaseNodeIterator;
class IBaseLinkIterator;
class IBaseLinkGeoIterator;
class IBaseLaneGroupIterator;
class IBaseLaneIterator;
class IBaseIntersectionAreaIterator;
class INodeAttributeIterator;
class ILinkAttributeIterator;
class ILinkGeoAttributeIterator;
class ILinkGeoGuidanceIterator;
class ILinkGeoAdasIterator;
class ILaneGroupAttributeIterator;
class ILaneAttributeIterator;
class ILaneBoundaryAttributeIterator;
class IIntersectionAreaAttributeIterator;
class IObjectBarrierIterator;
class IObjectCurbIterator;
class IObjectMarkingIterator;
class IObjectOverheadStructureFaceIterator;
class IObjectPerpendicularWallIterator;
class IObjectPoleIterator;
class IObjectSignIterator;
class IObjectTrafficLightIterator;
class ILinkGeo2ObjectIterator;
class ILane2ObjectIterator;
class IObject2LinkGeoIterator;
class IObject2LaneIterator;
class IObjectGroupIterator;
class IObstacleIterator;
class IObstacle2LinkGeoIterator;
class ILinkGeo2ObstacleIterator;
class IDataQueryCacheManager;

/**
	@brief		用于DataQuery的根接口，必须从该接口获取其他接口
	@details
*/
class IDataQueryManager
{
public:
	virtual ~IDataQueryManager() {}

	/**
		@brief			创建IMetaData接口实例
		@param [out]	spIMetaData		IMetaData
		@return			IMetaData接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateMetaDataAccessor( shared_ptr<IMetaData> &spIMetaData ) = 0;

	/**
		@brief			创建IDataQueryAssist接口实例
		@param [out]	spIDataQueryAssist		创建IDataQueryAssist接口实例
		@return			IDataQueryAssist接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateAssist( shared_ptr<IDataQueryAssist> &spIDataQueryAssist ) = 0;

	/**
		@brief			创建IBaseLinkIterator接口实例
		@param [out]	spIBaseLinkIterator		创建IBaseLinkIterator接口实例
		@param 			clLinkId		LinkId
		@return			IBaseLinkIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateBaseLinkIterator( shared_ptr<IBaseLinkIterator> &spIBaseLinkIterator, const Navinfo::Nis::CLinkId &clLinkId = Navinfo::Nis::CLinkId() ) = 0;

	/**
		@brief			创建IBaseNodeIterator接口实例
		@param [out]	spIBaseNodeIterator		创建IBaseNodeIterator接口实例
		@param 			clNodeId		NodeId
		@return			IBaseNodeIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateBaseNodeIterator( shared_ptr<IBaseNodeIterator> &spIBaseNodeIterator, const Navinfo::Nis::CNodeId &clNodeId = Navinfo::Nis::CNodeId() ) = 0;

	/**
		@brief			创建IBaseLinkGeoIterator接口实例
		@param [out]	spIBaseLinkGeoIterator		创建IBaseLinkGeoIterator接口实例
		@param 			clLinkGeoId		LinkGeoId
		@return			IBaseLinkGeoIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateBaseLinkGeoIterator( shared_ptr<IBaseLinkGeoIterator> &spIBaseLinkGeoIterator, const Navinfo::Nis::CLinkGeoId &clLinkGeoId = Navinfo::Nis::CLinkGeoId() ) = 0;

	/**
		@brief			创建IBaseLaneGroupIterator接口实例
		@param [out]	spIBaseLaneGroupIterator		创建IBaseLaneGroupIterator接口实例
		@param 			clLaneGroupId		LaneGroupId
		@return			IBaseLaneGroupIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateBaseLaneGroupIterator( shared_ptr<IBaseLaneGroupIterator> &spIBaseLaneGroupIterator, const Navinfo::Nis::CLaneGroupId &clLaneGroupId = Navinfo::Nis::CLaneGroupId() ) = 0;

	/**
		@brief			创建IBaseLaneIterator接口实例
		@param [out]	spIBaseLaneIterator		创建IBaseLaneIterator接口实例
		@param 			clLaneId		LaneId
		@return			IBaseLaneIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateBaseLaneIterator( shared_ptr<IBaseLaneIterator> &spIBaseLaneIterator, const Navinfo::Nis::CLaneId &clLaneId = Navinfo::Nis::CLaneId() ) = 0;

	/**
		@brief			创建ILinkAttributeIterator接口实例
		@param [out]	spILinkAttributeIterator		创建ILinkAttributeIterator接口实例
		@param 			clLinkId		LinkId
		@return			ILinkAttributeIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLinkAttributeIterator( shared_ptr<ILinkAttributeIterator> &spILinkAttributeIterator, const Navinfo::Nis::CLinkId &clLinkId = Navinfo::Nis::CLinkId() ) = 0;

	/**
		@brief			创建INodeAttributeIterator接口实例
		@param [out]	spINodeAttributeIterator		创建INodeAttributeIterator接口实例
		@param 			clNodeId		NodeId
		@return			INodeAttributeIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateNodeAttributeIterator( shared_ptr<INodeAttributeIterator> &spINodeAttributeIterator, const Navinfo::Nis::CNodeId &clNodeId = Navinfo::Nis::CNodeId() ) = 0;

	/**
		@brief			创建ILinkGeoAttributeIterator接口实例
		@param [out]	spILinkGeoAttributeIterator		创建ILinkGeoAttributeIterator接口实例
		@param 			clLinkGeoId		LinkGeoId
		@return			ILinkGeoAttributeIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLinkGeoAttributeIterator( shared_ptr<ILinkGeoAttributeIterator> &spILinkGeoAttributeIterator, const Navinfo::Nis::CLinkGeoId &clLinkGeoId = Navinfo::Nis::CLinkGeoId() ) = 0;

	/**
		@brief			创建ILinkGeoGuidanceIterator接口实例
		@param [out]	spILinkGeoGuidanceIterator		创建ILinkGeoGuidanceIterator接口实例
		@param 			clLinkGeoId		LinkGeoId
		@return			ILinkGeoGuidanceIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLinkGeoGuidanceIterator( shared_ptr<ILinkGeoGuidanceIterator> &spILinkGeoGuidanceIterator, const Navinfo::Nis::CLinkGeoId &clLinkGeoId = Navinfo::Nis::CLinkGeoId() ) = 0;

	/**
		@brief			创建ILinkGeoAdasIterator接口实例
		@param [out]	spILinkGeoAdasIterator		创建ILinkGeoAdasIterator接口实例
		@param 			clLinkGeoId		LinkGeoId
		@return			ILinkGeoAdasIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLinkGeoAdasIterator( shared_ptr<ILinkGeoAdasIterator> &spILinkGeoAdasIterator, const Navinfo::Nis::CLinkGeoId &clLinkGeoId = Navinfo::Nis::CLinkGeoId() ) = 0;

	/**
		@brief			创建ILaneGroupAttributeIterator接口实例
		@param [out]	spILaneGroupAttributeIterator		创建ILaneGroupAttributeIterator接口实例
		@param 			clLaneGroupId		LaneGroupId
		@return			ILaneGroupAttributeIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLaneGroupAttributeIterator( shared_ptr<ILaneGroupAttributeIterator> &spILaneGroupAttributeIterator, const Navinfo::Nis::CLaneGroupId &clLaneGroupId = Navinfo::Nis::CLaneGroupId() ) = 0;

	/**
		@brief			创建ILaneAttributeIterator接口实例
		@param [out]	spILaneAttributeIterator		创建ILaneAttributeIterator接口实例
		@param 			clLaneId		LaneId
		@return			ILaneAttributeIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLaneAttributeIterator( shared_ptr<ILaneAttributeIterator> &spILaneAttributeIterator, const Navinfo::Nis::CLaneId &clLaneId = Navinfo::Nis::CLaneId() ) = 0;

	/**
		@brief			创建ILaneBoundaryAttributeIterator接口实例
		@param [out]	spILaneBoundaryAttributeIterator		创建ILaneBoundaryAttributeIterator接口实例
		@param 			clLaneBoundaryId		LaneBoundaryId
		@return			ILaneBoundaryAttributeIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLaneBoundaryAttributeIterator( shared_ptr<ILaneBoundaryAttributeIterator> &spILaneBoundaryAttributeIterator, const Navinfo::Nis::CLaneBoundaryId &clLaneBoundaryId = Navinfo::Nis::CLaneBoundaryId() ) = 0;

	/**
		@brief			创建IObjectBarrierIterator接口实例
		@param [out]	spIObjectBarrierIterator		创建IObjectBarrierIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObjectBarrierIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectBarrierIterator( shared_ptr<IObjectBarrierIterator> &spIObjectBarrierIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObjectCurbIterator接口实例
		@param [out]	spIObjectCurbIterator		创建IObjectCurbIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObjectCurbIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectCurbIterator( shared_ptr<IObjectCurbIterator> &spIObjectCurbIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObjectMarkingIterator接口实例
		@param [out]	spIObjectMarkingIterator		创建IObjectMarkingIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObjectMarkingIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectMarkingIterator( shared_ptr<IObjectMarkingIterator> &spIObjectMarkingIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObjectOverheadStructureFaceIterator接口实例
		@param [out]	spIObjectOverheadStructureFaceIterator		创建IObjectOverheadStructureFaceIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObjectOverheadStructureFaceIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectOverheadStructureFaceIterator( shared_ptr<IObjectOverheadStructureFaceIterator> &spIObjectOverheadStructureFaceIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObjectPerpendicularWallIterator接口实例
		@param [out]	spIObjectPerpendicularWallIterator		创建IObjectPerpendicularWallIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObjectPerpendicularWallIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectPerpendicularWallIterator( shared_ptr<IObjectPerpendicularWallIterator> &spIObjectPerpendicularWallIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObjectPoleIterator接口实例
		@param [out]	spIObjectPoleIterator		创建IObjectPoleIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObjectPoleIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectPoleIterator( shared_ptr<IObjectPoleIterator> &spIObjectPoleIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObjectSignIterator接口实例
		@param [out]	spIObjectSignIterator		创建IObjectSignIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObjectSignIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectSignIterator( shared_ptr<IObjectSignIterator> &spIObjectSignIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObjectTrafficLightIterator接口实例
		@param [out]	spIObjectTrafficLightIterator		创建IObjectTrafficLightIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObjectTrafficLightIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectTrafficLightIterator( shared_ptr<IObjectTrafficLightIterator> &spIObjectTrafficLightIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建ILinkGeo2ObjectIterator接口实例
		@param [out]	spILinkGeo2ObjectIterator		创建ILinkGeo2ObjectIterator接口实例
		@param 			clLinkGeoId		LinkGeoId
		@return			ILinkGeo2ObjectIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLinkGeo2ObjectIterator( shared_ptr<ILinkGeo2ObjectIterator> &spILinkGeo2ObjectIterator, const Navinfo::Nis::CLinkGeoId &clLinkGeoId = Navinfo::Nis::CLinkGeoId() ) = 0;

	/**
		@brief			创建ILane2ObjectIterator接口实例
		@param [out]	spILane2ObjectIterator		创建ILane2ObjectIterator接口实例
		@param 			clLaneId		LaneId
		@return			ILane2ObjectIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLane2ObjectIterator( shared_ptr<ILane2ObjectIterator> &spILane2ObjectIterator, const Navinfo::Nis::CLaneId &clLaneId = Navinfo::Nis::CLaneId() ) = 0;

	/**
		@brief			创建IObject2LinkGeoIterator接口实例
		@param [out]	spIObject2LinkGeoIterator		创建IObject2LinkGeoIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObject2LinkGeoIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObject2LinkGeoIterator( shared_ptr<IObject2LinkGeoIterator> &spIObject2LinkGeoIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObject2LaneIterator接口实例
		@param [out]	spIObject2LaneIterator		创建IObject2LaneIterator接口实例
		@param 			clObjectId		ObjectId
		@return			IObject2LaneIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObject2LaneIterator( shared_ptr<IObject2LaneIterator> &spIObject2LaneIterator, const Navinfo::Nis::CObjectId &clObjectId = Navinfo::Nis::CObjectId() ) = 0;

	/**
		@brief			创建IObjectGroupIterator接口实例
		@param [out]	spIObjectGroupIterator		创建IObjectGroupIterator接口实例
		@param 			clObjectGroupId		ObjectGroupId
		@return			IObjectGroupIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObjectGroupIterator( shared_ptr<IObjectGroupIterator> &spIObjectGroupIterator, const Navinfo::Nis::CObjectGroupId &clObjectGroupId = Navinfo::Nis::CObjectGroupId() ) = 0;

	/**
		@brief			创建IObstacleIterator接口实例
		@param [out]	spIObstacleIterator		创建IObstacleIterator接口实例
		@param 			clObstacleId		ObstacleId
		@return			IObstacleIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObstacleIterator( shared_ptr<IObstacleIterator> &spIObstacleIterator, const Navinfo::Nis::CObstacleId &clObstacleId = Navinfo::Nis::CObstacleId() ) = 0;

	/**
		@brief			创建IObstacle2LinkGeoIterator接口实例
		@param [out]	spIObstacle2LinkGeoIterator		创建IObstacle2LinkGeoIterator接口实例
		@param 			clObstacleId		ObstacleId
		@return			IObstacle2LinkGeoIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateObstacle2LinkGeoIterator( shared_ptr<IObstacle2LinkGeoIterator> &spIObstacle2LinkGeoIterator, const Navinfo::Nis::CObstacleId &clObstacleId = Navinfo::Nis::CObstacleId() ) = 0;

	/**
		@brief			创建ILinkGeo2ObstacleIterator接口实例
		@param [out]	spILinkGeo2ObstacleIterator		创建ILinkGeo2ObstacleIterator接口实例
		@param 			clLinkGeoId		LinkGeoId
		@return			ILinkGeo2ObstacleIterator接口实例
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateLinkGeo2ObstacleIterator( shared_ptr<ILinkGeo2ObstacleIterator> &spILinkGeo2ObstacleIterator, const Navinfo::Nis::CLinkGeoId &clLinkGeoId = Navinfo::Nis::CLinkGeoId() ) = 0;

	/**
		@brief			创建IDataQueryCacheManager
		@param [out]	spIDataQueryCacheManager		创建IDataQueryCacheManager接口实例
		@return			IDataQueryCacheManager
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE CreateDataQueryCacheManager( shared_ptr<IDataQueryCacheManager> &spIDataQueryCacheManager ) = 0;

};

/**
	@brief		DataQuery的MetaData接口
	@details
*/
class IMetaData
{
public:
	virtual ~IMetaData() {}

	/**
		@brief			取得国家代码
		@return			国家标准代码。如：中国：CHN
		@details
	*/
	virtual string GetCountryCode( ) = 0;

	/**
		@brief			取得区域代码
		@return			
		@details
	*/
	virtual string GetRegionCode( ) = 0;

	/**
		@brief			取得数据版本号
		@return			数据版本号
		@details
	*/
	virtual string GetDataVersion( ) = 0;

};

/**
	@brief		通过位置检索地图要素的接口
	@details
*/
class IDataQueryAssist
{
public:
	virtual ~IDataQueryAssist() {}

	/**
		@brief			检索以Pos坐标点为中心以Distance为半径范围内的所有LinkGeo
		@param 			clPos			中心点坐标
		@param 			uiDistance		半径，单位为厘米，范围:[0,2500000]
		@param [out]	vclLinkGeoIdList		检索到的LinkGeoId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchLinkGeoByRadiusRange( const Navinfo::Nis::CCoord2D &clPos, uint uiDistance, vector<Navinfo::Nis::CLinkGeoId> &vclLinkGeoIdList ) = 0;

	/**
		@brief			检索矩形范围内的所有LinkGeo
		@param 			clRect			矩形框检索范围，范围：矩形框的长和宽不超过50公里
		@param [out]	vclLinkGeoIdList		检索到的LinkGeoId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchLinkGeoByRect( const Navinfo::Nis::CRect2D &clRect, vector<Navinfo::Nis::CLinkGeoId> &vclLinkGeoIdList ) = 0;

	/**
		@brief			检索距离Pos最近的LinkGeo，最大检索范围为50m
		@param 			clPos			中心点坐标
		@param [out]	clLinkGeoId		检索到的距离Pos最近的LinkGeoId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE GetMatchingLinkGeo( const Navinfo::Nis::CCoord2D &clPos, Navinfo::Nis::CLinkGeoId &clLinkGeoId ) = 0;

	/**
		@brief			检索以Pos坐标点为中心以Distance为半径范围内的所有LaneGroup
		@param 			clPos			中心点坐标
		@param 			uiDistance		半径，单位为厘米，范围:[0,2500000]
		@param [out]	vclLaneGroupIdList		检索到的LaneGroupId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchLaneGroupByRadiusRange( const Navinfo::Nis::CCoord2D &clPos, uint uiDistance, vector<Navinfo::Nis::CLaneGroupId> &vclLaneGroupIdList ) = 0;

	/**
		@brief			检索矩形范围内的所有LaneGroups
		@param 			clRect			矩形框检索范围，范围：矩形框的长和宽不超过50公里
		@param [out]	vclLaneGroupIdList		检索到的LaneGroupId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchLaneGroupByRect( const Navinfo::Nis::CRect2D &clRect, vector<Navinfo::Nis::CLaneGroupId> &vclLaneGroupIdList ) = 0;

	/**
		@brief			检索距离Pos最近的LaneGroup，最大检索范围为50m
		@param 			clPos			中心点坐标
		@param [out]	clLaneGroupId		检索到距离Pos最近的LaneGroupId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE GetMatchingLaneGroup( const Navinfo::Nis::CCoord2D &clPos, Navinfo::Nis::CLaneGroupId &clLaneGroupId ) = 0;

	/**
		@brief			检索以Pos坐标点为中心以Distance为半径范围内的所有Lane
		@param 			clPos			中心点坐标
		@param 			uiDistance		半径，单位为厘米，范围:[0,2500000]
		@param [out]	vclLaneIdList		检索到的LaneId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchLaneByRadiusRange( const Navinfo::Nis::CCoord2D &clPos, uint uiDistance, vector<Navinfo::Nis::CLaneId> &vclLaneIdList ) = 0;

	/**
		@brief			检索矩形范围内的所有Lanes
		@param 			clRect			矩形框检索范围，范围：矩形框的长和宽不超过50公里
		@param [out]	vclLaneIdList		检索到的LaneId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchLaneByRect( const Navinfo::Nis::CRect2D &clRect, vector<Navinfo::Nis::CLaneId> &vclLaneIdList ) = 0;

	/**
		@brief			检索距离Pos最近的Lane，最大检索范围为50m
		@param 			clPos			中心点坐标
		@param [out]	clLaneId		检索到距离Pos最近的LaneId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE GetMatchingLane( const Navinfo::Nis::CCoord2D &clPos, Navinfo::Nis::CLaneId &clLaneId ) = 0;

	/**
		@brief			检索以Pos坐标点为中心以Distance为半径范围内的所有LaneBoundary
		@param 			clPos			中心点坐标
		@param 			uiDistance		半径，单位为厘米，范围:[0,2500000]
		@param [out]	vclLaneBoundaryIdList		检索到的LaneBoundaryId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchLaneBoundaryByRadiusRange( const Navinfo::Nis::CCoord2D &clPos, uint uiDistance, vector<Navinfo::Nis::CLaneBoundaryId> &vclLaneBoundaryIdList ) = 0;

	/**
		@brief			检索矩形范围内的所有LaneBoundary
		@param 			clRect			矩形框检索范围，范围：矩形框的长和宽不超过50公里
		@param [out]	vclLaneBoundaryIdList		检索到的LaneBoundaryId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchLaneBoundaryByRect( const Navinfo::Nis::CRect2D &clRect, vector<Navinfo::Nis::CLaneBoundaryId> &vclLaneBoundaryIdList ) = 0;

	/**
		@brief			检索距离Pos最近的LaneBoundary，最大检索范围为50m
		@param 			clPos			中心点坐标
		@param [out]	clLaneBoundaryId		检索到距离Pos最近的LaneBoundaryId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE GetMatchingLaneBoundary( const Navinfo::Nis::CCoord2D &clPos, Navinfo::Nis::CLaneBoundaryId &clLaneBoundaryId ) = 0;

	/**
		@brief			检索以Pos坐标点为中心以Distance为半径范围内的所有Object
		@param 			clPos			中心点坐标
		@param 			uiDistance		半径，单位为厘米，范围:[0,2500000]
		@param 			enObjectType		检索的Object种别
		@param [out]	vclObjectIdList		检索到的ObjectId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchObjectByRadiusRange( const Navinfo::Nis::CCoord2D &clPos, uint uiDistance, Navinfo::Nis::OBJECT_TYPE enObjectType, vector<Navinfo::Nis::CObjectId> &vclObjectIdList ) = 0;

	/**
		@brief			检索矩形范围内的所有Objects
		@param 			clRect			矩形框检索范围，范围：矩形框的长和宽不超过50公里
		@param 			enObjectType		检索的Object种别
		@param [out]	vclObjectIdList		检索到的ObjectId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchObjectByRect( const Navinfo::Nis::CRect2D &clRect, Navinfo::Nis::OBJECT_TYPE enObjectType, vector<Navinfo::Nis::CObjectId> &vclObjectIdList ) = 0;

	/**
		@brief			检索距离Pos最近的Object，最大检索范围为50m
		@param 			clPos			中心点坐标
		@param 			enObjectType		检索的Object种别
		@param [out]	clObjectId		检索到的距离Pos最近的ObjectId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE GetMatchingObject( const Navinfo::Nis::CCoord2D &clPos, Navinfo::Nis::OBJECT_TYPE enObjectType, Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检索以Pos坐标点为中心以Distance为半径范围内的所有Obstacle
		@param 			clPos			中心点坐标
		@param 			uiDistance		半径，单位为厘米，范围:[0,2500000]
		@param [out]	vclObstacleIdList		检索到的ObstacleId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchObstacleByRadiusRange( const Navinfo::Nis::CCoord2D &clPos, uint uiDistance, vector<Navinfo::Nis::CObstacleId> &vclObstacleIdList ) = 0;

	/**
		@brief			检索矩形范围内的所有Obstacles
		@param 			clRect			矩形框检索范围，范围：矩形框的长和宽不超过50公里
		@param [out]	vclObstacleIdList		检索到的ObstacleId列表
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SearchObstacleByRect( const Navinfo::Nis::CRect2D &clRect, vector<Navinfo::Nis::CObstacleId> &vclObstacleIdList ) = 0;

};

/**
	@brief		访问Node基础情报的迭代器
	@details
*/
class IBaseNodeIterator
{
public:
	virtual ~IBaseNodeIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clNodeId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clNodeId		new NodeId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CNodeId &clNodeId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前NodeId
		@return			当前NodeId
		@details
	*/
	virtual const Navinfo::Nis::CNodeId& GetMyId( ) = 0;

	/**
		@brief			取得当前clNodeId的所有连接link
		@return			当前clNodeId的所有连接link
		@details		Connected Link List
	*/
	virtual const vector<Navinfo::Nis::CDirLinkId>& GetConnectedLinks( ) = 0;

};

/**
	@brief		访问Link基础情报的迭代器
	@details
*/
class IBaseLinkIterator
{
public:
	virtual ~IBaseLinkIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLinkId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLinkId		new LinkId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLinkId &clLinkId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前LinkId
		@return			当前LinkId
		@details
	*/
	virtual const Navinfo::Nis::CLinkId& GetMyId( ) = 0;

	/**
		@brief			取得 link始点的NodeId 
		@return			 link始点的NodeId 
		@details		NodeId of the link start intersection
	*/
	virtual const Navinfo::Nis::CNodeId& GetStartNodeId( ) = 0;

	/**
		@brief			取得 link始点的ConnectNo，顺序号从0开始
		@return			 link始点的ConnectNo
		@details		Connect No. of link start intersection
	*/
	virtual uchar GetStartNodeConnectNo( ) = 0;

	/**
		@brief			取得 link终点的NodeId 
		@return			 link终点的NodeId 
		@details		NodeId of the link end intersection
	*/
	virtual const Navinfo::Nis::CNodeId& GetEndNodeId( ) = 0;

	/**
		@brief			取得 link终点的 ConnectNo，顺序号从0开始
		@return			
		@details		Connect No. of link end intersection
	*/
	virtual uchar GetEndNodeConnectNo( ) = 0;

	/**
		@brief			取得该clLinkId 对应的所有LinkGeoId
		@return			该clLinkId 对应的所有LinkGeoId
		@details		Corresponding link geometry line
	*/
	virtual const vector<Navinfo::Nis::CLinkGeoId>& GetLinkGeoIdList( ) = 0;

};

/**
	@brief		访问LinkGeo基础情报的迭代器
	@details
*/
class IBaseLinkGeoIterator
{
public:
	virtual ~IBaseLinkGeoIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLinkGeoId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLinkGeoId		new LinkGeoId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLinkGeoId &clLinkGeoId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前LinkGeoId
		@return			当前LinkGeoId
		@details
	*/
	virtual const Navinfo::Nis::CLinkGeoId& GetMyId( ) = 0;

	/**
		@brief			取得LinkGeo在Link上对应的顺序号，顺序号从0开始
		@return			LinkGeo在Link上对应的顺序号，顺序号从0开始
		@details
	*/
	virtual const Navinfo::Nis::CLinkGeoNumberInLink& GetNumberInLink( ) = 0;

	/**
		@brief			取得LinkGeo上所有的laneGroupId，按照传入参数的Link方向顺序提供
		@param 			enDir			传入的Link方向，不能传入DIR_BOTH
		@return			LinkGeo上所有的laneGroupId，按照传入参数的Link方向顺序提供
		@details
	*/
	virtual const vector<Navinfo::Nis::CLaneGroupId>& GetLaneGroupIdList( Navinfo::Nis::LINK_DIRECTION enDir ) = 0;

};

/**
	@brief		访问LaneGroup基础情报的迭代器
	@details
*/
class IBaseLaneGroupIterator
{
public:
	virtual ~IBaseLaneGroupIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLaneGroup对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效.
		@param 			clLaneGroupId		new LaneGroupId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLaneGroupId &clLaneGroupId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前车道组Id
		@return			当前车道组Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneGroupId& GetMyId( ) = 0;

	/**
		@brief			取得LaneGroup内的所有车道情报
		@return			LaneGroup内的所有车道情报
		@details
	*/
	virtual const vector<Navinfo::Nis::CLane>& GetLaneList( ) = 0;

	/**
		@brief			取得LaneGroup在LinkGeo上的顺序号，顺序号从0开始
		@return			LaneGroup在LinkGeo上的顺序号，顺序号从0开始
		@details
	*/
	virtual const vector<Navinfo::Nis::CLaneGroupNumberInLinkGeo>& GetNumberInLinkGeo( ) = 0;

	/**
		@brief			取得当前车道组关联的交叉路口面Id | (暂未提供)
		@return			当前车道组关联的交叉路口面Id
		@details
	*/
	virtual const Navinfo::Nis::CIntersectionAreaId& GetIntersectionAreaId( ) = 0;

};

/**
	@brief		访问Lane基础情报的迭代器
	@details
*/
class IBaseLaneIterator
{
public:
	virtual ~IBaseLaneIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLaneId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效.
		@param 			clLaneId		new LaneId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLaneId &clLaneId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前车道Id
		@return			当前车道Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneId& GetMyId( ) = 0;

	/**
		@brief			判断左侧车道是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasLeftLane( ) = 0;

	/**
		@brief			取得左侧车道Id
		@return			左侧车道Id
		@details
	*/
	virtual Navinfo::Nis::CLaneId GetLeftLaneId( ) = 0;

	/**
		@brief			判断右侧车道是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasRightLane( ) = 0;

	/**
		@brief			取得右侧车道Id
		@return			右侧车道Id
		@details
	*/
	virtual Navinfo::Nis::CLaneId GetRightLaneId( ) = 0;

	/**
		@brief			取得当前车道方向上前向车道Id排列
		@return			前向车道Id排列
		@details
	*/
	virtual const vector<Navinfo::Nis::CLaneId>& GetSrcLaneIdList( ) = 0;

	/**
		@brief			取得当前车道方向上后向车道Id排列
		@return			后向车道ID排列
		@details
	*/
	virtual const vector<Navinfo::Nis::CLaneId>& GetDestLaneIdList( ) = 0;

	/**
		@brief			取得当前车道Id对应的LaneGroup在LinkGeo上的顺序号
		@return			LaneGroup在LinkGeo上的顺序号列表
		@details
	*/
	virtual const vector<Navinfo::Nis::CLaneGroupNumberInLinkGeo>& GetLaneGroupNumberInLinkGeo( ) = 0;

	/**
		@brief			取得当前车道关联的交叉路口面Id | (暂未提供)
		@return			当前车道关联的交叉路口面Id
		@details
	*/
	virtual const Navinfo::Nis::CIntersectionAreaId& GetIntersectionAreaId( ) = 0;

};

/**
	@brief		访问交叉路口面基本数据的迭代器
	@details
*/
class IBaseIntersectionAreaIterator
{
public:
	virtual ~IBaseIntersectionAreaIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clIntersectionAreaId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clIntersectionAreaId		交叉路口面Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CIntersectionAreaId &clIntersectionAreaId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前交叉路口面Id
		@return			当前交叉路口面Id
		@details
	*/
	virtual const Navinfo::Nis::CIntersectionAreaId& GetMyId( ) = 0;

	/**
		@brief			取得当前IntersectionAreaId关联的LaneGroupId列表
		@return			当前IntersectionAreaId关联的LaneGroupId列表
		@details		取得当前IntersectionAreaId关联的LaneGroupId列表
	*/
	virtual const vector<Navinfo::Nis::CLaneGroupId>& GetLaneGroupIdList( ) = 0;

};

/**
	@brief		访问Node属性情报的迭代器
	@details
*/
class INodeAttributeIterator
{
public:
	virtual ~INodeAttributeIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clNodeId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clNodeId		new NodeId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CNodeId &clNodeId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前NodeId
		@return			当前NodeId
		@details
	*/
	virtual const Navinfo::Nis::CNodeId& GetMyId( ) = 0;

	/**
		@brief			取得当前Node点的坐标位置
		@return			当前Node点的坐标位置
		@details
	*/
	virtual const Navinfo::Nis::CCoord2D& GetPosition( ) = 0;

	/**
		@brief			两根Link是否可以通行
		@param 			ucSrcLinkConnectNo		SrcLinkConnectNo
		@param 			ucDestLinkConnectNo		DestLinkConnectNo
		@return			true: 可通行，false: 不可通行
		@details
	*/
	virtual bool GetTransitionMask( uchar ucSrcLinkConnectNo, uchar ucDestLinkConnectNo ) = 0;

};

/**
	@brief		访问Link属性情报的迭代器
	@details
*/
class ILinkAttributeIterator
{
public:
	virtual ~ILinkAttributeIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLinkId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLinkId		new LinkId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLinkId &clLinkId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前LinkId
		@return			当前LinkId
		@details
	*/
	virtual const Navinfo::Nis::CLinkId& GetMyId( ) = 0;

	/**
		@brief			取得Link的共通属性，例如LinkType、TravelDirection等
		@return			Link的共通属性，例如LinkType、TravelDirection等
		@details
	*/
	virtual const Navinfo::Nis::CLinkCommonAttribute& GetLinkCommonAttribute( ) = 0;

	/**
		@brief			判断车道数是否存在
		@param 			enDir			道路方向
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasNumLanes( Navinfo::Nis::LINK_DIRECTION enDir ) = 0;

	/**
		@brief			取得Link的车道数
		@param 			enDir			道路方向
		@return			Link的车道数
		@details
	*/
	virtual uchar GetNumLanes( Navinfo::Nis::LINK_DIRECTION enDir ) = 0;

	/**
		@brief			取得当前Link长度，单位为 厘米 
		@return			当前Link长度，单位为 厘米 
		@details		Link Length
	*/
	virtual uint GetLength( ) = 0;

	/**
		@brief			取得link的平均速度，单位为 km/h
		@return			link的平均速度，单位为 km/h
		@details		AverageSpeed
	*/
	virtual uchar GetAverageSpeed( ) = 0;

	/**
		@brief			判断道路限制信息是否存在
		@param 			enDir			道路方向
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasProhibitedPassage( Navinfo::Nis::LINK_DIRECTION enDir ) = 0;

	/**
		@brief			取得道路限制信息
		@param 			enDir			道路方向
		@return			道路限制信息
		@details
	*/
	virtual const Navinfo::Nis::CProhibitedPassageSet& GetProhibitedPassage( Navinfo::Nis::LINK_DIRECTION enDir ) = 0;

};

/**
	@brief		访问LinkGeo属性情报的迭代器
	@details
*/
class ILinkGeoAttributeIterator
{
public:
	virtual ~ILinkGeoAttributeIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLinkGeoId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLinkGeoId		new LinkGeoId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLinkGeoId &clLinkGeoId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前LinkGeoId
		@return			当前LinkGeoId
		@details
	*/
	virtual const Navinfo::Nis::CLinkGeoId& GetMyId( ) = 0;

	/**
		@brief			取得LinkGeo的共通属性，例如LinkType、TravelDirection等
		@return			LinkGeo的共通属性
		@details
	*/
	virtual const Navinfo::Nis::CLinkCommonAttribute& GetLinkCommonAttribute( ) = 0;

	/**
		@brief			取得当前LinkGeo的形状点
		@return			当前LinkGeo的形状点
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord2D>& GetGeometry( ) = 0;

	/**
		@brief			取得当前LinkGeo长度，单位为 厘米 
		@return			当前LinkGeo长度，单位为 厘米
		@details
	*/
	virtual uint GetLength( ) = 0;

};

/**
	@brief		访问LinkGeo诱导属性情报的迭代器
	@details
*/
class ILinkGeoGuidanceIterator
{
public:
	virtual ~ILinkGeoGuidanceIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLinkGeoId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLinkGeoId		new LinkGeoId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLinkGeoId &clLinkGeoId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前的LinkGeoId
		@return			当前的LinkGeoId
		@details
	*/
	virtual const Navinfo::Nis::CLinkGeoId& GetMyId( ) = 0;

	/**
		@brief			判断可变限速是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasVariableSpeedLimit( ) = 0;

	/**
		@brief			取得可变限速情报
		@return			可变限速情报
		@details
	*/
	virtual const Navinfo::Nis::CVariableSpeedLimitList& GetVariableSpeedLimit( ) = 0;

	/**
		@brief			判断固定限速是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasFixedSpeedLimit( ) = 0;

	/**
		@brief			取得固定限速情报
		@return			固定限速情报
		@details
	*/
	virtual const Navinfo::Nis::CFixedSpeedLimitList& GetFixedSpeedLimit( ) = 0;

	/**
		@brief			判断条件限速是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasConditionalSpeedLimit( ) = 0;

	/**
		@brief			取得条件限速情报
		@return			条件限速情报
		@details
	*/
	virtual const Navinfo::Nis::CCondSpeedLimitList& GetConditionalSpeedLimit( ) = 0;

	/**
		@brief			判断分隔带是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasDividerType( ) = 0;

	/**
		@brief			取得分隔带情报
		@return			分隔带情报
		@details
	*/
	virtual Navinfo::Nis::CDividerTypeSet GetDividerType( ) = 0;

};

/**
	@brief		访问LinkGeoAdas属性情报的迭代器
	@details
*/
class ILinkGeoAdasIterator
{
public:
	virtual ~ILinkGeoAdasIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLinkGeoId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLinkGeoId		new LinkGeoId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLinkGeoId &clLinkGeoId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前LinkGeoId
		@return			当前LinkGeoId
		@details
	*/
	virtual const Navinfo::Nis::CLinkGeoId& GetMyId( ) = 0;

	/**
		@brief			取得LinkGeo的所有属性Point 
		@return			LinkGeo的所有属性Point 
		@details
	*/
	virtual const vector<Navinfo::Nis::CAdasPoint>& GetPointList( ) = 0;

	/**
		@brief			判断中央隔离带是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasRoadMedian( ) = 0;

	/**
		@brief			取得中央隔离带情报
		@return			中央隔离带情报
		@details
	*/
	virtual const Navinfo::Nis::CAdasRoadMedianSet& GetRoadMedian( ) = 0;

};

/**
	@brief		访问LaneGroup属性情报的迭代器
	@details
*/
class ILaneGroupAttributeIterator
{
public:
	virtual ~ILaneGroupAttributeIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLaneGroupId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效.
		@param 			clLaneGroupId		LaneGroup Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLaneGroupId &clLaneGroupId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前车道组Id
		@return			当前车道组Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneGroupId& GetMyId( ) = 0;

	/**
		@brief			取得车道数
		@return			车道数
		@details
	*/
	virtual uchar GetLaneCount( ) = 0;

	/**
		@brief			取得车道边线数
		@return			车道边线数
		@details
	*/
	virtual uchar GetLaneBoundaryCount( ) = 0;

	/**
		@brief			取得指定车道的车道种别
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			车道种别
		@details
	*/
	virtual const Navinfo::Nis::CLaneType& GetLaneType( uchar ucLaneNo ) = 0;

	/**
		@brief			取得指定车道的车道几何
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			车道几何
		@details
	*/
	virtual const Navinfo::Nis::CLaneCenterline& GetLaneGeometry( uchar ucLaneNo ) = 0;

	/**
		@brief			取得指定车道的左侧车道边线
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			车道边线id
		@details
	*/
	virtual const Navinfo::Nis::CLaneBoundaryId& GetLaneLeftBoundary( uchar ucLaneNo ) = 0;

	/**
		@brief			取得指定车道的右侧车道边线
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			车道边线
		@details
	*/
	virtual const Navinfo::Nis::CLaneBoundaryId& GetLaneRightBoundary( uchar ucLaneNo ) = 0;

	/**
		@brief			取得指定车道边线的边线情报
		@param 			ucLaneBoundaryNo		车道边线的序号
		@return			边线情报
		@details
	*/
	virtual const Navinfo::Nis::CLaneBoundaryParallelElementGroup& GetLaneBoundary( uchar ucLaneBoundaryNo ) = 0;

	/**
		@brief			判断车道边线是否存在左侧车道
		@param 			ucLaneBoundaryNo		车道边线的序号
		@return			
		@details
	*/
	virtual bool LaneBoundaryHasLeftLane( uchar ucLaneBoundaryNo ) = 0;

	/**
		@brief			取得车道边线左侧车道
		@param 			ucLaneBoundaryNo		车道边线的序号
		@return			
		@details
	*/
	virtual const Navinfo::Nis::CLaneId& GetLaneBoundaryLeftLane( uchar ucLaneBoundaryNo ) = 0;

	/**
		@brief			判断车道边线是否存在右侧车道
		@param 			ucLaneBoundaryNo		车道边线的序号
		@return			
		@details
	*/
	virtual bool LaneBoundaryHasRightLane( uchar ucLaneBoundaryNo ) = 0;

	/**
		@brief			取得车道边线右侧车道
		@param 			ucLaneBoundaryNo		车道边线的序号
		@return			
		@details
	*/
	virtual const Navinfo::Nis::CLaneId& GetLaneBoundaryRightLane( uchar ucLaneBoundaryNo ) = 0;

	/**
		@brief			判断可变限速是否存在
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasVariableSpeedLimit( uchar ucLaneNo ) = 0;

	/**
		@brief			取得可变限速情报
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			
		@details
	*/
	virtual const Navinfo::Nis::CVariableSpeedLimitList& GetVariableSpeedLimit( uchar ucLaneNo ) = 0;

	/**
		@brief			判断固定限速是否存在
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasFixedSpeedLimit( uchar ucLaneNo ) = 0;

	/**
		@brief			取得固定限速情报
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			固定限速情报
		@details
	*/
	virtual const Navinfo::Nis::CFixedSpeedLimitList& GetFixedSpeedLimit( uchar ucLaneNo ) = 0;

	/**
		@brief			判断条件限速是否存在
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasConditionalSpeedLimit( uchar ucLaneNo ) = 0;

	/**
		@brief			取得条件限速情报
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			条件限速情报
		@details
	*/
	virtual const Navinfo::Nis::CCondSpeedLimitList& GetConditionalSpeedLimit( uchar ucLaneNo ) = 0;

	/**
		@brief			判断交换车道类型是否存在
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasTransitionLaneType( uchar ucLaneNo ) = 0;

	/**
		@brief			取得交换车道类型
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			交换车道类型
		@details
	*/
	virtual const Navinfo::Nis::CTransitionLaneTypeSet& GetTransitionLaneType( uchar ucLaneNo ) = 0;

	/**
		@brief			判断车道宽度是否存在
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasWidth( uchar ucLaneNo ) = 0;

	/**
		@brief			取得车道宽度（单位：厘米）
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			车道宽度
		@details
	*/
	virtual const Navinfo::Nis::CWidthSet& GetWidth( uchar ucLaneNo ) = 0;

	/**
		@brief			判断车道限制信息是否存在
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasProhibitedPassage( uchar ucLaneNo ) = 0;

	/**
		@brief			取得车道限制情报
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			车道限制情报
		@details
	*/
	virtual const Navinfo::Nis::CProhibitedPassageSet& GetProhibitedPassage( uchar ucLaneNo ) = 0;

	/**
		@brief			判断车道标记是否存在
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasLaneMarking( uchar ucLaneNo ) = 0;

	/**
		@brief			取得车道标记情报
		@param 			ucLaneNo		车道的序号，通行方向上从路牙到路中间，从0开始顺序编号
		@return			车道标记情报
		@details
	*/
	virtual const Navinfo::Nis::CLaneMarkingSet& GetLaneMarking( uchar ucLaneNo ) = 0;

};

/**
	@brief		访问Lane属性情报的迭代器
	@details
*/
class ILaneAttributeIterator
{
public:
	virtual ~ILaneAttributeIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLaneId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效.
		@param 			clLaneId		车道Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLaneId &clLaneId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前车道Id
		@return			当前车道Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneId& GetMyId( ) = 0;

	/**
		@brief			取得车道类型
		@return			车道类型
		@details
	*/
	virtual Navinfo::Nis::CLaneType GetLaneType( ) = 0;

	/**
		@brief			取得车道中心线情报
		@return			车道中心线情报
		@details
	*/
	virtual const Navinfo::Nis::CLaneCenterline& GetGeometry( ) = 0;

	/**
		@brief			取得车道左侧边线Id
		@return			车道边线Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneBoundaryId& GetLeftBoundary( ) = 0;

	/**
		@brief			取得车道右侧边线Id
		@return			车道边线Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneBoundaryId& GetRightBoundary( ) = 0;

	/**
		@brief			判断可变限速是否存在
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasVariableSpeedLimit( ) = 0;

	/**
		@brief			取得可变限速情报
		@return			可变限速情报
		@details
	*/
	virtual const Navinfo::Nis::CVariableSpeedLimitList& GetVariableSpeedLimit( ) = 0;

	/**
		@brief			判断固定限速是否存在
		@return			true：存在 false：不存在
		@details
	*/
	virtual bool HasFixedSpeedLimit( ) = 0;

	/**
		@brief			取得固定限速情报
		@return			固定限速情报
		@details
	*/
	virtual const Navinfo::Nis::CFixedSpeedLimitList& GetFixedSpeedLimit( ) = 0;

	/**
		@brief			判断条件限速是否存在
		@return			true：存在 false：不存在
		@details
	*/
	virtual bool HasConditionalSpeedLimit( ) = 0;

	/**
		@brief			取得条件限速情报
		@return			条件限速情报
		@details
	*/
	virtual const Navinfo::Nis::CCondSpeedLimitList& GetConditionalSpeedLimit( ) = 0;

	/**
		@brief			判断交换车道类型是否存在
		@return			true：存在 false：不存在
		@details
	*/
	virtual bool HasTransitionLaneType( ) = 0;

	/**
		@brief			取得交换车道类型
		@return			交换车道类型情报
		@details
	*/
	virtual const Navinfo::Nis::CTransitionLaneTypeSet& GetTransitionLaneType( ) = 0;

	/**
		@brief			判断车道宽度是否存在
		@return			true：存在 false：不存在
		@details
	*/
	virtual bool HasWidth( ) = 0;

	/**
		@brief			取得车道宽度（单位：厘米）
		@return			车道宽度情报
		@details
	*/
	virtual const Navinfo::Nis::CWidthSet& GetWidth( ) = 0;

	/**
		@brief			判断车道限制信息是否存在
		@return			true：存在 false：不存在
		@details
	*/
	virtual bool HasProhibitedPassage( ) = 0;

	/**
		@brief			取得车道限制情报
		@return			车道限制情报
		@details
	*/
	virtual const Navinfo::Nis::CProhibitedPassageSet& GetProhibitedPassage( ) = 0;

	/**
		@brief			判断车道标记是否存在
		@return			true：存在 false：不存在
		@details
	*/
	virtual bool HasLaneMarking( ) = 0;

	/**
		@brief			取得车道标记情报
		@return			车道标记情报
		@details
	*/
	virtual const Navinfo::Nis::CLaneMarkingSet& GetLaneMarking( ) = 0;

};

/**
	@brief		访问LaneBoundary属性情报的迭代器
	@details
*/
class ILaneBoundaryAttributeIterator
{
public:
	virtual ~ILaneBoundaryAttributeIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLaneBoundaryId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效.
		@param 			clLaneBoundaryId		new LaneBoundaryId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLaneBoundaryId &clLaneBoundaryId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前车道边线Id
		@return			车道边线Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneBoundaryId& GetMyId( ) = 0;

	/**
		@brief			取得车道边线情报
		@return			车道边线情报
		@details
	*/
	virtual const Navinfo::Nis::CLaneBoundaryParallelElementGroup& GetLaneBoundary( ) = 0;

	/**
		@brief			判断边线左侧车道是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasLeftLane( ) = 0;

	/**
		@brief			取得边线左侧车道Id
		@return			车道Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneId& GetLeftLane( ) = 0;

	/**
		@brief			判断边线右侧车道是否存在
		@return			ture：存在，false：不存在
		@details
	*/
	virtual bool HasRightLane( ) = 0;

	/**
		@brief			取得边线右侧车道Id
		@return			车道Id
		@details
	*/
	virtual const Navinfo::Nis::CLaneId& GetRightLane( ) = 0;

	/**
		@brief			判断边线是否是道路边界
		@return			ture：是，false：不是
		@details
	*/
	virtual bool IsRoadBoundary( ) = 0;

};

/**
	@brief		访问交叉路口面属性的迭代器
	@details
*/
class IIntersectionAreaAttributeIterator
{
public:
	virtual ~IIntersectionAreaAttributeIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clIntersectionAreaId对应的属性元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clIntersectionAreaId		交叉路口面Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CIntersectionAreaId &clIntersectionAreaId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前交叉路口面Id
		@return			当前迭代器指向的交叉路口面的Id
		@details
	*/
	virtual const Navinfo::Nis::CIntersectionAreaId& GetMyId( ) = 0;

	/**
		@brief			取得交叉路口面的几何形状。
		@return			当前迭代器指向的交叉路口面的几何形状
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord3D>& GetGeometry( ) = 0;

};

/**
	@brief		访问栅栏对象的迭代器
	@details
*/
class IObjectBarrierIterator
{
public:
	virtual ~IObjectBarrierIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前栅栏对象Id
		@return			当前迭代器指向的栅栏对象的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectId& GetMyId( ) = 0;

	/**
		@brief			取得当前对象种别
		@return			当前对象的种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_TYPE GetType( ) = 0;

	/**
		@brief			取得当前对象的几何形状，可以有一条或多条Polyline，返回值的size()就是Polyline的个数。
		@return			当前对象的几何形状坐标点List
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord3DList>& GetGeometry( ) = 0;

};

/**
	@brief		访问路牙对象的迭代器
	@details
*/
class IObjectCurbIterator
{
public:
	virtual ~IObjectCurbIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前路牙对象Id
		@return			当前迭代器指向的路牙对象的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectId& GetMyId( ) = 0;

	/**
		@brief			取得当前对象种别
		@return			当前对象的种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_TYPE GetType( ) = 0;

	/**
		@brief			取得当前对象的几何形状，Curb对象只有一条Polyline。
		@return			当前对象的几何形状坐标点List
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord3DList>& GetGeometry( ) = 0;

};

/**
	@brief		访问Marking对象的迭代器
	@details
*/
class IObjectMarkingIterator
{
public:
	virtual ~IObjectMarkingIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前Marking对象Id
		@return			当前迭代器指向的Marking对象的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectId& GetMyId( ) = 0;

	/**
		@brief			取得当前对象种别
		@return			当前对象的种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_TYPE GetType( ) = 0;

	/**
		@brief			判断BoundingBox是否存在
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasBoundingBox( ) = 0;

	/**
		@brief			除停止线和让行线以外的Marking对象只有BoundingBox，使用该接口取对象的外接矩形框。
		@return			
		@details
	*/
	virtual const Navinfo::Nis::CCoord3DList& GetBoundingBox( ) = 0;

	/**
		@brief			判断Centerline是否存在
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasCenterline( ) = 0;

	/**
		@brief			停止线和让行线只有Centerline，使用该接口取中心线形状点List，其他Marking对象只有BoundingBox。
		@return			当前对象的中心线形状点List
		@details
	*/
	virtual const Navinfo::Nis::CCoord3DList& GetCenterline( ) = 0;

	/**
		@brief			判断Color是否存在
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasColor( ) = 0;

	/**
		@brief			取得当前对象的颜色
		@return			当前对象的颜色
		@details
	*/
	virtual Navinfo::Nis::OBJECT_COLOR GetColor( ) = 0;

	/**
		@brief			判断GroupId是否存在
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasGroupId( ) = 0;

	/**
		@brief			取得当前Marking对象所在的对象Group的GroupId
		@return			当前对象所在Group的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectGroupId& GetGroupId( ) = 0;

};

/**
	@brief		访问上方障碍物面对象的迭代器
	@details
*/
class IObjectOverheadStructureFaceIterator
{
public:
	virtual ~IObjectOverheadStructureFaceIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前上方障碍物面对象Id
		@return			当前迭代器指向的上方障碍物面对象的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectId& GetMyId( ) = 0;

	/**
		@brief			取得当前对象种别
		@return			当前对象的种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_TYPE GetType( ) = 0;

	/**
		@brief			取得当前对象的几何形状，上方障碍物面的几何形状是其外轮廓
		@return			当前对象的几何形状坐标点List
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord3D>& GetOutline( ) = 0;

};

/**
	@brief		访问垂直墙对象的迭代器
	@details
*/
class IObjectPerpendicularWallIterator
{
public:
	virtual ~IObjectPerpendicularWallIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前垂直墙对象Id
		@return			当前迭代器指向的垂直墙对象的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectId& GetMyId( ) = 0;

	/**
		@brief			取得当前对象种别
		@return			当前对象的种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_TYPE GetType( ) = 0;

	/**
		@brief			取得当前对象的几何形状
		@return			当前对象的外接矩形框坐标点List
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord3D>& GetOutline( ) = 0;

};

/**
	@brief		访问杆对象的迭代器
	@details
*/
class IObjectPoleIterator
{
public:
	virtual ~IObjectPoleIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前杆对象Id
		@return			当前迭代器指向的杆对象的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectId& GetMyId( ) = 0;

	/**
		@brief			取得当前对象种别
		@return			当前对象的种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_TYPE GetType( ) = 0;

	/**
		@brief			取得杆与地面交叉点的坐标
		@return			当前杆对象与地面交叉点的坐标
		@details
	*/
	virtual const Navinfo::Nis::CCoord3D& GetPositionGround( ) = 0;

	/**
		@brief			取得杆顶坐标
		@return			当前杆对象的杆顶的坐标
		@details
	*/
	virtual const Navinfo::Nis::CCoord3D& GetPositionTop( ) = 0;

	/**
		@brief			取得杆的下底面直径，单位为厘米
		@return			当前杆对象的直径
		@details
	*/
	virtual ushort GetDiameter( ) = 0;

	/**
		@brief			取得杆顶直径，单位为厘米
		@return			当前杆对象的杆顶直接
		@details
	*/
	virtual ushort GetDiameterTop( ) = 0;

};

/**
	@brief		访问Sign对象的迭代器
	@details
*/
class IObjectSignIterator
{
public:
	virtual ~IObjectSignIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前Sign对象Id
		@return			当前迭代器指向的Sign对象的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectId& GetMyId( ) = 0;

	/**
		@brief			取得当前对象种别
		@return			当前对象的种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_TYPE GetType( ) = 0;

	/**
		@brief			Sign的形状种别
		@return			Sign的形状种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_SIGN_SHAPE GetSignShape( ) = 0;

	/**
		@brief			判断SignContent是否存在
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasSignContent( ) = 0;

	/**
		@brief			取得Sign的内容
		@return			Sign的内容
		@details
	*/
	virtual const Navinfo::Nis::CObjectSignContent& GetSignContent( ) = 0;

	/**
		@brief			取得颜色
		@return			颜色
		@details
	*/
	virtual Navinfo::Nis::OBJECT_COLOR GetColor( ) = 0;

	/**
		@brief			取得Sign的航向（朝向）。单位：0.0001 度，保留整数位，取值范围：[0,3600000]。
		@return			当前Sign对象的朝向
		@details
	*/
	virtual uint GetHeading( ) = 0;

	/**
		@brief			取得当前对象的外接矩形框
		@return			当前Sign对象的外接矩形框
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord3D>& GetBoundingBox( ) = 0;

	/**
		@brief			取得当前对象的几何形状
		@return			当前Sign对象的几何形状
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord3D>& GetOutLine( ) = 0;

};

/**
	@brief		访问交通灯对象的迭代器
	@details
*/
class IObjectTrafficLightIterator
{
public:
	virtual ~IObjectTrafficLightIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前交通灯对象Id
		@return			当前迭代器指向的交通灯对象的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectId& GetMyId( ) = 0;

	/**
		@brief			取得当前对象种别
		@return			当前对象的种别
		@details
	*/
	virtual Navinfo::Nis::OBJECT_TYPE GetType( ) = 0;

	/**
		@brief			取得当前交通灯对象的详细情报
		@return			当前对象的详细情报
		@details
	*/
	virtual const Navinfo::Nis::CTrafficLightDetails& GetDetail( ) = 0;

	/**
		@brief			取得当前对象的外接矩形框
		@return			当前对象的外接矩形框坐标点List
		@details
	*/
	virtual const vector<Navinfo::Nis::CCoord3D>& GetBoundingBox( ) = 0;

	/**
		@brief			判断GroupId是否存在
		@return			true：存在，false：不存在
		@details
	*/
	virtual bool HasGroupId( ) = 0;

	/**
		@brief			取得对象关联GroupId
		@return			当前对象所在Group的Id
		@details
	*/
	virtual const Navinfo::Nis::CObjectGroupId& GetGroupId( ) = 0;

};

/**
	@brief		访问LinkGeo与对象的关联关系记录的迭代器
	@details
*/
class ILinkGeo2ObjectIterator
{
public:
	virtual ~ILinkGeo2ObjectIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLinkGeoId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLinkGeoId		LinkGeoId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLinkGeoId &clLinkGeoId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得LinkGeo与Object关联关系记录列表
		@param 			enDir			当前LinkGeo的方向，不能传入DIR_BOTH
		@return			与当前LinkGeo有关联的Object的Relation记录
		@details
	*/
	virtual const vector<Navinfo::Nis::CLinkGeoObjectRelation>& GetRelationList( Navinfo::Nis::LINK_DIRECTION enDir ) = 0;

};

/**
	@brief		访问车道与对象的关联关系记录的迭代器（仅支持停止线和交通灯与车道的关联）
	@details
*/
class ILane2ObjectIterator
{
public:
	virtual ~ILane2ObjectIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLaneId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLaneId		车道Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLaneId &clLaneId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得车道与Object关联关系记录列表
		@return			与当前车道有关联的Object的Relation记录
		@details
	*/
	virtual const vector<Navinfo::Nis::CLaneObjectRelation>& GetRelationList( ) = 0;

};

/**
	@brief		访问对象与LinkGeo的关联关系记录的迭代器
	@details
*/
class IObject2LinkGeoIterator
{
public:
	virtual ~IObject2LinkGeoIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得Object与LinkGeo关联关系记录列表
		@return			与当前对象有关联的LinkGeo的Relation记录
		@details
	*/
	virtual const vector<Navinfo::Nis::CObjectLinkGeoRelation>& GetRelationList( ) = 0;

};

/**
	@brief		访问对象与车道的关联关系记录的迭代器（仅支持停止线和交通灯与车道的关联）
	@details
*/
class IObject2LaneIterator
{
public:
	virtual ~IObject2LaneIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectId		对象Id
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectId &clObjectId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得Object与车道关联关系记录列表
		@return			与当前对象有关联的车道的Relation记录
		@details
	*/
	virtual const vector<Navinfo::Nis::CObjectLaneRelation>& GetRelationList( ) = 0;

};

/**
	@brief		访问对象关联Group的迭代器（仅支持停止线和交通灯的关联）
	@details
*/
class IObjectGroupIterator
{
public:
	virtual ~IObjectGroupIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObjectGroupId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObjectGroupId		对象关联GroupId
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObjectGroupId &clObjectGroupId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口。
		@return			ture：有效，false：无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得对象Group
		@return			当前对象Group情报
		@details
	*/
	virtual const Navinfo::Nis::CObjectGroup& GetObjectGroup( ) = 0;

};

/**
	@brief		指向Obstacle的迭代器
	@details
*/
class IObstacleIterator
{
public:
	virtual ~IObstacleIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObstacleId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObstacleId		当前ObstacleId
		@return			RETURN_CODE, SUCCESS成功， FAILURE失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObstacleId &clObstacleId ) = 0;

	/**
		@brief			取得迭代器是否有效。如果无效，不能使用下述接口
		@return			true有效，false无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得当前ObstacleId
		@return			当前ObsatcleId
		@details
	*/
	virtual const Navinfo::Nis::CObstacleId& GetMyId( ) = 0;

	/**
		@brief			取得当前Obstacle的形状点
		@return			当前Obstacle的形状点
		@details
	*/
	virtual const Navinfo::Nis::CCoord2DList& GetGeometry( ) = 0;

	/**
		@brief			取得当前obstacle的高度，单位为厘米
		@return			当前Obstacle的高度，单位为厘米
		@details
	*/
	virtual ushort GetHeightIndicatorAboveRoadLevel( ) = 0;

};

/**
	@brief		指向Obstacle2LinkGeo的迭代器
	@details
*/
class IObstacle2LinkGeoIterator
{
public:
	virtual ~IObstacle2LinkGeoIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clObstacleId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clObstacleId		当前ObstacleId
		@return			RETURN_CODE, SUCCESS成功， FAILURE失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CObstacleId &clObstacleId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口
		@return			true有效，false无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得Obstacle到LinkGeo的关联关系
		@return			当前Obstacle关联的LinkGeo
		@details
	*/
	virtual const vector<Navinfo::Nis::CLinkGeoId>& GetLinkGeoIdList( ) = 0;

};

/**
	@brief		指向LinkGeo2Obstacle的迭代器
	@details
*/
class ILinkGeo2ObstacleIterator
{
public:
	virtual ~ILinkGeo2ObstacleIterator() {}

	/**
		@brief			更改迭代器的位置以指向参数clLinkGeoId对应的元素。如果迭代器指向的位置发生了变化，则对以下函数中在此之前获得的值的引用将无效。
		@param 			clLinkGeoId		当前LinkGeoId
		@return			RETURN_CODE, SUCCESS成功， FAILURE失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE MoveTo( const Navinfo::Nis::CLinkGeoId &clLinkGeoId ) = 0;

	/**
		@brief			检查迭代器是否有效。如果无效，不能使用下述接口
		@return			true有效，false无效
		@details
	*/
	virtual bool IsValid( ) = 0;

	/**
		@brief			取得传入方向的LinkGeo到Obstacle的关联关系
		@param 			enDir			linkgeo的方向，不能传入DIR_BOTH
		@return			当前LinkGeo关联的Obstacle
		@details
	*/
	virtual const vector<Navinfo::Nis::CObstacleId>& GetObstacleIdList( Navinfo::Nis::LINK_DIRECTION enDir ) = 0;

};

/**
	@brief		Cache管理
	@details
*/
class IDataQueryCacheManager
{
public:
	virtual ~IDataQueryCacheManager() {}

	/**
		@brief			设定热点位置。DataQuery可预先加载热点位置的数据以加快数据读取速度。
		@param 			clCurrentPos		位置坐标
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SetCurrentPosition( const Navinfo::Nis::CCoord2D &clCurrentPos ) = 0;

	/**
		@brief			设置热点路线。DataQuery可预先加载热点路线上的数据以加快数据读取速度。
		@param 			vclRoute		路线，顺序排列的一组坐标点
		@return			SUCCESS：成功，FAILURE：失败
		@details
	*/
	virtual Navinfo::IMPAuto::Common::RETURN_CODE SetRoute( const vector<Navinfo::Nis::CCoord2D> &vclRoute ) = 0;

};

}
}
}

#endif	//	__NIDATAQUERYIF_H_
